// 创建新的 axios 对象
import axios, {AxiosHeaders} from 'axios'
import useStore from '../store'

const store = useStore()
const _axios = axios.create({
    // 添加路径前缀
    baseURL: import.meta.env.VITE_PROXY_API_PREFIX
})

// 请求拦截器
_axios.interceptors.request.use(
    (config) => { // 统一添加请求头
        config.headers = new AxiosHeaders({
            Authorization: 'Bearer ' + store.token
        })
        return config
    },
    (error) => { // 请求出错时的处理
        return Promise.reject(error)
    }
)

// 响应拦截器
_axios.interceptors.response.use(
    (response) => { // 状态码  2xx
        // 这里的code是自定义的错误码
        if (response.data.code === 200) {
            return response
        } else {
            console.error('服务器内部错误:', response.data)
            return Promise.reject(response)
        }
    },
    (error) => { // 状态码 > 2xx, 400,401,403,404,500
        console.error('请求错误:', error) // 处理了异常
        if (error.response) {
            // 服务器返回了错误响应（如400、401等）
            switch (error.response.status) {
                case 400:
                    console.error('400错误:', error.response.data);
                    break;
                case 401:
                    // 401未授权：可跳转登录页或刷新token
                    console.error('401未授权:', error.response.data);

                    // 方案1：刷新token后重试请求
                    // return refreshToken().then(() => axios(error.config));

                    // 方案2：跳转登录页
                    // window.location.href = '/index';
                    break;
                case 403:
                    console.error('403禁止访问:', error.response.data);
                    break;
                // 其他状态码...
            }
        } else if (error.request) {
            // 请求已发送，但没有收到响应
            console.error('请求超时或无响应');
        } else {
            // 设置请求时发生错误
            console.error('请求配置错误:', error.message);
        }

        // 最终必须返回Promise.reject，将错误传递给后续处理
        return Promise.reject(error);
    }
)

export default _axios